Be more strict in ignoring ineffective modifiers
authorMatthias Clasen <mclasen@redhat.com>
Sun, 9 Sep 2012 22:28:48 +0000 (18:28 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 9 Sep 2012 22:28:48 +0000 (18:28 -0400)
After my recent fix for this, nautilus was still having problems
telling keeping F10 and Shift-F10 apart. With this change, we are
treating levels with the same symbol like inactive levels, ignoring
them entirely.

gdk/x11/gdkkeys-x11.c

index 9d06cbaeafce0bb0734750c4f626b8cb4c7a134d..4dba9d406f03f7f7e702e5f3e31b7e4ebb3a99db 100644 (file)
@@ -1113,7 +1113,7 @@ MyEnhancedXkbTranslateKeyCode(register XkbDescPtr     xkb,
         int found = 0;
 
         for (i=0,entry=type->map;i<type->map_count;i++,entry++) {
-            if (!entry->active)
+            if (!entry->active || syms[col+entry->level] == syms[col])
               continue;
             if (mods_rtrn) {
                 int bits = 0;
@@ -1130,7 +1130,7 @@ MyEnhancedXkbTranslateKeyCode(register XkbDescPtr     xkb,
                  * and F10 anymore). And don't add modifiers that are
                  * explicitly marked as preserved, either.
                  */
-                if ((bits == 1 && syms[col+entry->level] != syms[col]) ||
+                if (bits == 1 ||
                     (mods&type->mods.mask) == entry->mods.mask)
                   {
                     if (type->preserve)
@@ -1140,7 +1140,7 @@ MyEnhancedXkbTranslateKeyCode(register XkbDescPtr     xkb,
                   }
             }
 
-            if (!found&&((mods&type->mods.mask)==entry->mods.mask)) {
+            if (!found && ((mods&type->mods.mask) == entry->mods.mask)) {
                 col+= entry->level;
                 if (type->preserve)
                     preserve= type->preserve[i].mask;